import 'package:injectable/injectable.dart';
import 'package:mobx/mobx.dart';
import 'package:{{project_name.snakeCase()}}/features/{{feature_name.snakeCase()}}/domain/usecases/get_{{feature_name.snakeCase()}}.dart';
import 'package:{{project_name.snakeCase()}}/features/{{feature_name.snakeCase()}}/presentation/cubit/{{feature_name.snakeCase()}}_state.dart';

@injectable
class {{feature_name.pascalCase()}}Store {
  {{feature_name.pascalCase()}}Store(this._get{{feature_name.pascalCase()}});

  final Get{{feature_name.pascalCase()}} _get{{feature_name.pascalCase()}};
  final Observable<{{feature_name.pascalCase()}}State> state =
      Observable(const {{feature_name.pascalCase()}}State.initial());

  Future<void> load() async {
    runInAction(() => state.value = const {{feature_name.pascalCase()}}State.loading());
    final result = await _get{{feature_name.pascalCase()}}();
    runInAction(() {
      state.value = result.match(
        (failure) => {{feature_name.pascalCase()}}State.error(failure.message),
        {{feature_name.pascalCase()}}State.loaded,
      );
    });
  }
}
